TCP ulanishlarini boshqarish va soket holat mashinasiga oid batafsil qo'llanma, har bir holat, o'tishlar va tarmoq dasturlash uchun amaliy ahamiyatini tushuntiradi.
TCP ulanishlarini boshqarish: Soket holat mashinasini tushunish
Transmission Control Protocol (TCP) internetning asosiy qismidir, u IP tarmog'i orqali aloqa qiluvchi xostlarda ishlaydigan dasturlar o'rtasida ma'lumotlarni ishonchli, tartibli va xatolarni tekshirilgan holda yetkazib beradi. TCP ishonchliligining muhim jihati uning ulanishga yo'naltirilganligidir, u yaxshi belgilangan jarayon orqali boshqariladi va soket holat mashinasida aks etadi.
Ushbu maqola TCP soket holat mashinasini, uning turli holatlarini va ular orasidagi o'tishlarni tushunish bo'yicha keng qamrovli qo'llanmani taqdim etadi. Biz har bir holatning ahamiyatini, holat o'zgarishlarini keltirib chiqaradigan hodisalarni va tarmoq dasturlash va nosozliklarni bartaraf etish uchun oqibatlarini o'rganamiz. Biz butun dunyo bo'ylab dasturchilar va tarmoq administratorlari uchun dolzarb bo'lgan amaliy misollarni ko'rib chiqamiz.
TCP ning ulanishga yo'naltirilgan tabiatini tushunish
Ulanishsiz bo'lgan UDP (User Datagram Protocol) dan farqli o'laroq, TCP har qanday ma'lumot uzatilishi oldidan ikki oxirgi nuqta o'rtasida ulanish o'rnatadi. Ulanishni o'rnatish bosqichi uch tomonlama qo'l berib ko'rishni o'z ichiga oladi va ikkala tomon ham ma'lumotlarni yuborish va qabul qilishga tayyorligini ta'minlaydi. Ulanishni tugatish ham ma'lum bir ketma-ketlikka amal qiladi, bu barcha ma'lumotlar to'g'ri yetkazilishini va resurslar to'g'ri chiqarilishini ta'minlaydi. Soket holat mashinasi ushbu ulanish bosqichlarining vizual va kontseptual ko'rinishidir.
TCP Soket holat mashinasi: Vizual qo'llanma
TCP soket holat mashinasi dastlab murakkab tuyulishi mumkin, ammo uni alohida holatlarga va ular orasidagi o'tishlarga ajratganda, uni boshqarish osonroq bo'ladi. Holatlar TCP ulanishining turli bosqichlarini, dastlabki o'rnatishdan tortib to to'g'ri yakunlashgacha bo'lgan bosqichlarni ifodalaydi.
Umumiy TCP holatlari
- CLOSED: Bu dastlabki holat bo'lib, ulanish yo'qligini anglatadi. Soket ishlatilmaydi va hech qanday resurs ajratilmagan.
- LISTEN: Server kiruvchi ulanish so'rovlarini kutmoqda. U ma'lum bir portda passiv ravishda tinglaydi. 80-portda tinglayotgan veb-serverni yoki 25-portda tinglayotgan elektron pochta serverini tasavvur qiling.
- SYN_SENT: Mijoz ulanishni boshlash uchun SYN (sinxronlash) paketini yubordi va SYN-ACK (sinxronlash-tasdiqlash) javobini kutmoqda.
- SYN_RECEIVED: Server SYN paketini oldi va SYN-ACK ni qaytarib yubordi. Endi u qo'l berib ko'rishni yakunlash uchun mijozdan ACK (tasdiqlash) ni kutmoqda.
- ESTABLISHED: Ulanish muvaffaqiyatli o'rnatildi va mijoz va server o'rtasida ma'lumot uzatilishi mumkin. Bu haqiqiy dastur darajasidagi aloqa sodir bo'ladigan holat.
- FIN_WAIT_1: Oxirgi nuqta (mijoz yoki server) ulanishni tugatishni boshlash uchun FIN (tugatish) paketini yubordi va boshqa oxirgi nuqtadan ACK ni kutmoqda.
- FIN_WAIT_2: Oxirgi nuqta FIN paketi uchun ACK ni oldi va boshqa oxirgi nuqtadan FIN paketini kutmoqda.
- CLOSE_WAIT: Oxirgi nuqta boshqa oxirgi nuqtadan FIN paketini oldi, bu boshqa tomon ulanishni yopmoqchi ekanligini ko'rsatadi. Oxirgi nuqta ulanishning o'z tomonini yopishga tayyorlanmoqda. Odatda u qolgan ma'lumotlarni qayta ishlaydi va keyin o'z FIN paketini yuboradi.
- LAST_ACK: Oxirgi nuqta olingan FIN ga javoban o'z FIN paketini yubordi va boshqa oxirgi nuqtadan yakuniy ACK ni kutmoqda.
- CLOSING: Bu nisbatan kam uchraydigan holat. U ikkala oxirgi nuqta deyarli bir vaqtning o'zida FIN paketlarini yuborganda sodir bo'ladi. Oxirgi nuqta FIN paketi uchun ACK ni kutmoqda.
- TIME_WAIT: Oxirgi nuqta yakuniy ACK ni yuborgandan so'ng, TIME_WAIT holatiga kiradi. Ushbu holat ulanishning ishonchli tugatilishini ta'minlash uchun juda muhimdir. Biz buni keyinroq batafsil muhokama qilamiz.
Kamroq tarqalgan TCP holatlari (Tarmoqdagi nosozliklarni bartaraf etish paytida tez-tez kuzatiladi)
- UNKNOWN: Soket holatini aniqlab bo'lmadi. Bu turli past darajadagi xatolar tufayli yoki yadro standart TCP holatlari bilan qamrab olinmagan soket holatini bildirganida sodir bo'lishi mumkin.
Holat o'tishlari: TCP ulanishining oqimi
TCP soket holat mashinasi soket SYN, ACK yoki FIN paketlarini yuborish yoki qabul qilish kabi hodisalar asosida bir holatdan boshqasiga qanday o'tishini belgilaydi. Ushbu o'tishlarni tushunish TCP ulanishining hayotiy davrini tushunishning kalitidir.
Ulanishni o'rnatish (Uch tomonlama qo'l berib ko'rish)
- Mijoz: CLOSED -> SYN_SENT: Mijoz serverga SYN paketini yuborish orqali ulanishni boshlaydi.
- Server: CLOSED -> LISTEN: Server kiruvchi ulanish so'rovlarini tinglamoqda.
- Server: LISTEN -> SYN_RECEIVED: Server SYN paketini oladi va SYN-ACK paketi bilan javob beradi.
- Mijoz: SYN_SENT -> ESTABLISHED: Mijoz SYN-ACK paketini oladi va serverga ACK paketini yuboradi.
- Server: SYN_RECEIVED -> ESTABLISHED: Server ACK paketini oladi va ulanish o'rnatiladi.
Misol: Veb-brauzer (mijoz) veb-serverga (server) ulanadi. Brauzer serverning 80-portiga SYN paketini yuboradi. 80-portda tinglayotgan server SYN-ACK bilan javob beradi. Keyin brauzer ACK ni yuboradi va HTTP ulanishini o'rnatadi.
Ma'lumot uzatish
Ulanish ESTABLISHED holatida bo'lgandan so'ng, ma'lumotlar ikkala yo'nalishda ham uzatilishi mumkin. TCP protokoli ma'lumotlarning ishonchli va to'g'ri tartibda yetkazilishini ta'minlaydi.
Ulanishni tugatish (To'rt tomonlama qo'l berib ko'rish)
Ulanishni tugatish mijoz yoki server tomonidan FIN paketini yuborish orqali boshlanadi.
- A oxirgi nuqtasi (masalan, mijoz): ESTABLISHED -> FIN_WAIT_1: A oxirgi nuqtasi ulanishni yopishga qaror qiladi va B oxirgi nuqtasiga FIN paketini yuboradi.
- B oxirgi nuqtasi (masalan, server): ESTABLISHED -> CLOSE_WAIT: B oxirgi nuqtasi FIN paketini oladi va A oxirgi nuqtasiga ACK paketini yuboradi. Keyin B oxirgi nuqtasi CLOSE_WAIT holatiga o'tadi, bu yopish so'rovini olganini, lekin qolgan ma'lumotlarni qayta ishlashni tugatishi kerakligini ko'rsatadi.
- A oxirgi nuqtasi: FIN_WAIT_1 -> FIN_WAIT_2: A oxirgi nuqtasi o'zining FIN uchun ACK ni oladi va B oxirgi nuqtasidan FIN ni kutib, FIN_WAIT_2 ga o'tadi.
- B oxirgi nuqtasi: CLOSE_WAIT -> LAST_ACK: B oxirgi nuqtasi o'z ma'lumotlari bilan tugagandan so'ng, A oxirgi nuqtasiga FIN paketini yuboradi.
- A oxirgi nuqtasi: FIN_WAIT_2 -> TIME_WAIT: A oxirgi nuqtasi B oxirgi nuqtasidan FIN ni oladi va ACK ni yuboradi. Keyin u TIME_WAIT ga o'tadi.
- B oxirgi nuqtasi: LAST_ACK -> CLOSED: B oxirgi nuqtasi ACK ni oladi va ulanishni yopadi va CLOSED holatiga qaytadi.
- A oxirgi nuqtasi: TIME_WAIT -> CLOSED: Belgilangan vaqt tugagandan so'ng (2MSL - Maximum Segment Lifetime), A oxirgi nuqtasi TIME_WAIT dan CLOSED ga o'tadi.
Misol: Veb-brauzer veb-sahifani yuklab olishni tugatgandan so'ng, u veb-server bilan TCP ulanishini yopishni boshlashi mumkin. Brauzer serverga FIN paketini yuboradi va to'rt tomonlama qo'l berib ko'rish to'g'ri tugatilishini ta'minlaydi.
TIME_WAIT holatining ahamiyati
TIME_WAIT holati ko'pincha noto'g'ri tushuniladi, ammo u TCP ulanishining ishonchli tugatilishini ta'minlashda muhim rol o'ynaydi. Nima uchun bu muhim:
- Kechiktirilgan paketlarning oldini olish: Oldingi ulanishdan paketlar tarmoqda kechiktirilishi mumkin. TIME_WAIT holati ushbu kechiktirilgan paketlarning bir xil soketda o'rnatilgan keyingi ulanishlarga xalaqit bermasligini ta'minlaydi. Usiz yangi ulanish eski, tugatilgan ulanishdan tasodifan ma'lumot olishi mumkin, bu esa oldindan aytib bo'lmaydigan xatti-harakatlarga va potentsial xavfsizlik zaifliklariga olib keladi.
- Passiv yopuvchining ishonchli tugatilishi: Ba'zi stsenariylarda, bir oxirgi nuqta ulanishni passiv ravishda yopishi mumkin (ya'ni u dastlabki FIN ni yubormaydi). TIME_WAIT holati faol yopishni boshlaydigan oxirgi nuqtaga, agar u yo'qolsa, yakuniy ACK ni qayta uzatishga imkon beradi va passiv yopuvchi tasdiqni oladi va ulanishni ishonchli tugatishi mumkin.
TIME_WAIT holatining davomiyligi odatda Maximum Segment Lifetime (2MSL) dan ikki baravar ko'p bo'ladi, bu paket tarmoqda mavjud bo'lishi mumkin bo'lgan maksimal vaqt. Bu oldingi ulanishdan kelib chiqqan har qanday kechiktirilgan paketlar muddati tugashi uchun etarli vaqtga ega bo'lishini ta'minlaydi.
TIME_WAIT va Server o'lchamliligi
TIME_WAIT holati yuqori hajmli serverlar, ayniqsa ko'plab qisqa muddatli ulanishlarni boshqaradigan serverlar uchun muammolarni keltirib chiqarishi mumkin. Agar server ko'p sonli ulanishlarni faol ravishda yopsa, u TIME_WAIT holatida ko'plab soketlar bilan yakunlanishi mumkin, bu esa mavjud resurslarni tugatishi va yangi ulanishlarning o'rnatilishiga to'sqinlik qilishi mumkin. Bu ba'zan TIME_WAIT tugashi deb ataladi.
TIME_WAIT tugashini kamaytirishning bir nechta usullari mavjud:
- SO_REUSEADDR soket opsiyasi: Bu opsiya soketga TIME_WAIT holatida bo'lgan boshqa soket tomonidan allaqachon ishlatilgan portga bog'lanishga imkon beradi. Bu port tugashi muammolarini bartaraf etishga yordam beradi. Biroq, ushbu opsiyadan ehtiyotkorlik bilan foydalaning, chunki agar u to'g'ri amalga oshirilmasa, u potentsial xavfsizlik xavflarini keltirib chiqarishi mumkin.
- TIME_WAIT davomiyligini kamaytirish: Odatda tavsiya etilmasa-da, ba'zi operatsion tizimlar TIME_WAIT davomiyligini kamaytirishga imkon beradi. Biroq, buni faqat potentsial xavflarni ehtiyotkorlik bilan hisobga olgan holda qilish kerak.
- Yukni muvozanatlash: Trafikni bir nechta serverga taqsimlash individual serverlardagi yukni kamaytirishga va TIME_WAIT tugashining oldini olishga yordam beradi.
- Ulanishni birlashtirish: Tez-tez ulanishlarni o'rnatadigan va tugatadigan ilovalar uchun ulanishni birlashtirish ulanishlarni yaratish va yo'q qilish xarajatlarini kamaytirishga yordam beradi, shu bilan TIME_WAIT holatiga kiradigan soketlar sonini minimallashtiradi.
Soket holatlaridan foydalanib TCP ulanishlaridagi nosozliklarni bartaraf etish
TCP soket holat mashinasini tushunish tarmoqdagi muammolarni bartaraf etish uchun juda muhimdir. Mijoz va server tomonlarida soketlarning holatini tekshirib, siz ulanish muammolari haqida tushunchaga ega bo'lishingiz va potentsial sabablarni aniqlashingiz mumkin.
Umumiy muammolar va ularning belgilari
- Ulanish rad etildi: Bu odatda server so'ralgan portda tinglamayotganini yoki xavfsizlik devori ulanishga to'sqinlik qilayotganini ko'rsatadi. Mijoz, ehtimol, ulanish rad etilganligini ko'rsatadigan xato xabarini ko'radi. Mijoz tomonidagi soket holati dastlab SYN_SENT bo'lishi mumkin, lekin vaqt tugagandan so'ng oxir-oqibat CLOSED ga o'tadi.
- Ulanish vaqti tugadi: Bu odatda mijoz serverga etib bora olmasligini anglatadi. Buning sababi tarmoq ulanishidagi muammolar, xavfsizlik devoridagi cheklovlar yoki serverning ishlamay qolishi bo'lishi mumkin. Mijozning soketi vaqt tugashidan oldin SYN_SENT da uzoq vaqt qoladi.
- Yuqori TIME_WAIT hisobi: Yuqorida aytib o'tilganidek, TIME_WAIT holatida yuqori sondagi soketlar serverda potentsial o'lchamlilik muammolarini ko'rsatishi mumkin. Monitoring vositalari har bir holatda soketlar sonini kuzatishga yordam beradi.
- CLOSE_WAIT da tiqilib qolish: Agar server CLOSE_WAIT holatida tiqilib qolsa, bu u mijozdan FIN paketini olganini, lekin hali ulanishning o'z tomonini yopmaganini anglatadi. Bu server ilovasida ulanishni tugatishni to'g'ri boshqarishga to'sqinlik qiladigan xato borligini ko'rsatishi mumkin.
- Kutilmagan RST paketlari: RST (qayta o'rnatish) paketi TCP ulanishini birdan to'xtatadi. Ushbu paketlar ilovaning buzilishi, xavfsizlik devorining paketlarni tashlashi yoki ketma-ketlik raqamlarining mos kelmasligi kabi turli muammolarni ko'rsatishi mumkin.
Soket holatlarini monitoring qilish uchun vositalar
TCP soket holatlarini monitoring qilish uchun bir nechta vositalar mavjud:
- netstat: Ko'pgina operatsion tizimlarda (Linux, Windows, macOS) mavjud bo'lgan buyruq qatori yordam dasturi, u tarmoq ulanishlarini, marshrutlash jadvallarini, interfeys statistikasini va boshqalarni ko'rsatadi. Undan barcha faol TCP ulanishlarini va ularning tegishli holatlarini ro'yxatga olish uchun foydalanish mumkin. Misol: Linux/macOS da `netstat -an | grep tcp` yoki Windows da `netstat -ano | findstr TCP`. Windows dagi `-o` opsiyasi har bir ulanish bilan bog'liq bo'lgan jarayon identifikatorini (PID) ko'rsatadi.
- ss (Soket statistikasi): Linux dagi yangi buyruq qatori yordam dasturi bo'lib, u netstatdan ko'ra soketlar haqida batafsilroq ma'lumot beradi. U ko'pincha tezroq va samaraliroq. Misol: `ss -tan` (TCP, barcha, raqamli manzillar).
- tcpdump/Wireshark: Bular tarmoq trafigini batafsil tahlil qilish imkonini beruvchi paketni qo'lga olish vositalaridir. Siz ulardan TCP paketlarining (SYN, ACK, FIN, RST) ketma-ketligini tekshirish va holat o'tishlarini tushunish uchun foydalanishingiz mumkin.
- Process Explorer (Windows): Ishlayotgan jarayonlarni va ularning tegishli resurslarini, jumladan tarmoq ulanishlarini tekshirish imkonini beruvchi kuchli vosita.
- Tarmoq monitoringi vositalari: Turli xil tijorat va ochiq kodli tarmoq monitoringi vositalari tarmoq trafigi va soket holatlariga real vaqt rejimida ko'rinishni ta'minlaydi. Misollar: SolarWinds Network Performance Monitor, PRTG Network Monitor va Zabbix.
Tarmoq dasturlash uchun amaliy oqibatlar
TCP soket holat mashinasini tushunish tarmoq dasturchilari uchun juda muhimdir. Mana ba'zi amaliy oqibatlar:
- Xatolarni to'g'ri boshqarish: Tarmoq ilovalari ulanishni o'rnatish, ma'lumotlarni uzatish va ulanishni tugatish bilan bog'liq potentsial xatolarni to'g'ri boshqarishi kerak. Bunga ulanish vaqtining tugashi, ulanishni qayta o'rnatish va boshqa kutilmagan hodisalarni boshqarish kiradi.
- To'g'ri o'chirish: Ilovalar ulanishlarni to'g'ri tugatish uchun FIN paketlarini yuborishni o'z ichiga olgan to'g'ri o'chirish tartibini amalga oshirishi kerak. Bu ulanishning to'satdan tugashining va potentsial ma'lumotlarning yo'qolishining oldini olishga yordam beradi.
- Resurslarni boshqarish: Tarmoq ilovalari resurslarni (masalan, soketlar, fayl deskriptorlari) resurslarning tugashining oldini olish uchun samarali boshqarishi kerak. Bunga endi kerak bo'lmaganda soketlarni yopish va TIME_WAIT holatlarini tegishli tarzda boshqarish kiradi.
- Xavfsizlikni hisobga olish: TCP ulanishlari bilan bog'liq potentsial xavfsizlik zaifliklaridan, masalan, SYN suv toshqinlari va TCP o'g'irlashdan xabardor bo'ling. Ushbu tahdidlardan himoya qilish uchun tegishli xavfsizlik choralarini ko'ring.
- To'g'ri soket opsiyalarini tanlash: SO_REUSEADDR, TCP_NODELAY va TCP_KEEPALIVE kabi soket opsiyalarini tushunish tarmoq ishlashini va ishonchliligini optimallashtirish uchun juda muhimdir.
Haqiqiy dunyo misollari va stsenariylari
TCP soket holat mashinasini tushunish muhimligini ko'rsatish uchun bir nechta haqiqiy dunyo stsenariylarini ko'rib chiqaylik:
- Og'ir yuk ostidagi veb-server: Trafikning ko'payishini boshdan kechirayotgan veb-server ulanish xatolariga olib keladigan TIME_WAIT tugashiga duch kelishi mumkin. Soket holatlarini monitoring qilish ushbu muammoni aniqlashga yordam beradi va tegishli mitigatsiya strategiyalari (masalan, SO_REUSEADDR, yukni muvozanatlash) amalga oshirilishi mumkin.
- Ma'lumotlar bazasiga ulanish muammolari: Ilovani ma'lumotlar bazasi serveriga ulashning uddasidan chiqmasligi xavfsizlik devori cheklovlari, tarmoq ulanishidagi muammolar yoki ma'lumotlar bazasi serverining ishlamay qolishi sababli bo'lishi mumkin. Ilova va ma'lumotlar bazasi serveridagi soket holatlarini tekshirish asosiy sababni aniqlashga yordam beradi.
- Fayllarni uzatishdagi xatolar: Faylni uzatishning o'rtasida muvaffaqiyatsizlikka uchrashi ulanishning qayta o'rnatilishi yoki tarmoqning uzilishi sababli bo'lishi mumkin. TCP paketlarini va soket holatlarini tahlil qilish muammo tarmoq yoki ilovaga bog'liqligini aniqlashga yordam beradi.
- Taqsimlangan tizimlar: Mikroservislar bilan taqsimlangan tizimlarda xizmatlararo aloqa uchun TCP ulanishlarini boshqarishni tushunish juda muhimdir. Ulanishni to'g'ri boshqarish va xatolarni boshqarish tizimning ishonchliligi va mavjudligini ta'minlash uchun zarurdir. Misol uchun, xizmat quyi qaramlikka erishib bo'lmasligini aniqlasa, u TCP ulanish vaqtini kutish va yopilishlarni to'g'ri boshqarmasa, chiqish portlarini tezda tugatishi mumkin.
Global mulohazalar
Global kontekstda TCP ulanishlari bilan ishlaganda, quyidagilarni hisobga olish muhimdir:
- Tarmoq kechikishi: Tarmoq kechikishi mijoz va server o'rtasidagi geografik masofaga qarab sezilarli darajada farq qilishi mumkin. Yuqori kechikish TCP ulanishlarining ishlashiga ta'sir qilishi mumkin, ayniqsa tez-tez aylanma aloqani talab qiladigan ilovalar uchun.
- Xavfsizlik devoridagi cheklovlar: Turli mamlakatlar va tashkilotlar turli xil xavfsizlik devori siyosatiga ega bo'lishi mumkin. Ilovangizning xavfsizlik devorlari orqali TCP ulanishlarini o'rnatishi mumkinligini ta'minlash muhimdir.
- Tarmoq tiqilishi: Tarmoq tiqilishi TCP ulanishlarining ishlashiga ham ta'sir qilishi mumkin. Tiqilishni boshqarish mexanizmlarini (masalan, TCP tiqilishni boshqarish algoritmlari) amalga oshirish ushbu muammolarni kamaytirishga yordam beradi.
- Internatsionalizatsiya: Agar ilovangiz turli tillarda ma'lumotlarni boshqarsa, TCP ulanishi tegishli belgilar kodlashni (masalan, UTF-8) qo'llab-quvvatlash uchun sozlanganligini ta'minlash muhimdir.
- Qoidalar va muvofiqlik: Turli mamlakatlarda ma'lumotlarni uzatish va xavfsizlik bilan bog'liq barcha tegishli qoidalar va muvofiqlik talablaridan xabardor bo'ling.
Xulosa
TCP soket holat mashinasi tarmoqning asosiy tushunchasidir. Holatlar, o'tishlar va holat mashinasining oqibatlarini yaxshi tushunish tarmoq dasturchilari, tizim administratorlari va tarmoq ilovalarini ishlab chiqish yoki boshqarish bilan shug'ullanadigan har bir kishi uchun juda muhimdir. Ushbu bilimdan foydalanib, siz ishonchliroq, samaraliroq va xavfsizroq tarmoq yechimlarini yaratishingiz va tarmoq bilan bog'liq muammolarni samarali bartaraf etishingiz mumkin.
Dastlabki qo'l berib ko'rishdan to to'g'ri yakunlashgacha, TCP holat mashinasi TCP ulanishining har bir jihatini boshqaradi. Har bir holatni va ular orasidagi o'tishlarni tushunib, dasturchilar va tarmoq administratorlari tarmoq ishlashini optimallashtirish, ulanish muammolarini bartaraf etish va global o'zaro bog'langan dunyoda gullab-yashnashi mumkin bo'lgan chidamli, o'lchamliligi mumkin bo'lgan ilovalarni yaratish imkoniyatiga ega bo'ladilar.
Qo'shimcha o'rganish
- RFC 793: Transmission Control Protocol uchun asl spetsifikatsiya.
- TCP/IP Illustrated, Volume 1 by W. Richard Stevens: TCP/IP protokol to'plamiga oid klassik va keng qamrovli qo'llanma.
- Onlayn hujjatlar: Soket dasturlash va TCP ulanishlarini boshqarish haqida ma'lumot olish uchun operatsion tizimingiz yoki dasturlash tilingiz uchun hujjatlarga murojaat qiling.